系统采用 NIST FIPS 204 ML-DSA-44 (Dilithium) 数字签名算法实现身份认证:
- 身份生成:基于格密码学的后量子签名密钥对,公钥大小 1312 字节,私钥 2528 字节
- 身份验证:采用公钥指纹验证机制,有效缩小证书体积,提升验证效率
- 挑战-响应协议:实现双向认证流程,防止中间人攻击(MITM)
- 身份存储:通过 PBKDF2HMAC-SHA256 密钥派生,结合 AES-256-GCM 加密本地身份凭证
技术特点:
- 基于模块格上的短整数解(SIS)问题,抗量子计算攻击
- 签名大小约 2420 字节,安全强度等价于 AES-128
- 支持确定性与概率性签名生成
- 本地身份文件加密存储于 data/keys/node_identity.dat
采用创新的 公钥指纹 + 网络坐标 邀请码机制:
- 邀请码结构:包含节点 ID、公钥哈希、公网 IP 和端口信息
- 安全发现:通过 STUN 服务器获取公网坐标,支持 IPv4/IPv6 双栈
- 身份验证:建立连接前验证 Dilithium 签名,确保节点身份真实性
- 轻量传输:邀请码体积压缩,便于在多种渠道传输
通信通道建立采用 NIST FIPS 203 ML-KEM-512 (Kyber) 密钥封装算法:
- 密钥交换:Kyber512 封装机制,公钥 800 字节,密文 768 字节
- 前向保密:每次会话生成新的密钥材料,确保历史通信安全
- 完美前向保密:长期密钥泄露不影响已建立会话的安全性
- 实现细节:模块格上的学习带误差(MLWE)问题提供量子安全保障
应用层数据传输采用认证加密算法:
- 加密算法:AES-256-GCM 提供机密性、完整性和认证性
- 认证标签:128 位认证标签,防止消息篡改
- 随机 Nonce:96 位 Nonce,确保密文不可预测性
- 数据分片:大文件分片传输,提高传输可靠性
自定义传输层协议实现可靠数据传输:
- 选择性确认 (SACK):基于 SACK 机制的重传策略,减少冗余数据传输
- 延迟梯度拥塞控制:Hybrid 混合拥塞控制算法,结合延迟梯度与丢包率
- 心跳保活:周期性心跳检测,维护连接状态
- 乱序重组:支持数据包乱序到达与重组
性能指标:
- 支持最大 1400 字节 MTU
- 拥塞窗口动态调整,适应网络变化
- 丢包率小于 0.1% 时吞吐量接近 TCP
数据容灾基于 Shamir's Secret Sharing 算法:
- 数学基础:GF(256) 有限域上的多项式插值
- 门限参数:(t, n) 方案,t 为恢复门限,n 为参与者总数
- 查表加速:预计算 GF(256) 乘法/加法表,提升性能 10 倍以上
- 信息论安全:少于 t 个份额无法获取任何明文信息
完整的备份流程包含以下步骤:
- 文件加密:首先使用 AES-256-GCM 加密源文件
- 秘密分割:将加密后的文件分割为 n 个份额
- 份额签名:每个份额使用 Dilithium 私钥签名,确保完整性
- 分发存储:通过 P2P 网络将份额分发至已连接节点
- 清单生成:生成包含元数据的清单文件,用于恢复
安全特性:
- 每个份额独立加密存储
- 支持任意大小文件的流式处理
- 进度实时反馈与断点续传
数据恢复流程实现多方协同:
- 清单导入:读取元数据清单,确定所需份额数量
- 网络寻呼:向 P2P 网络广播份额请求
- 份额验证:验证每个收到份额的 Dilithium 签名
- 秘密重构:收集 ≥ t 个有效份额,通过拉格朗日插值重构原始文件
- 完整性校验:重构后验证文件哈希值
容错能力:
- 最多可容忍 n - t 个节点失效
- 支持网络节点动态加入/退出
- 份额来源不可预测,提升安全性
本地敏感数据采用金库式加密保护:
- 密钥派生:PBKDF2HMAC-SHA256,迭代次数 100000+
- 盐值管理:随机生成 16 字节盐值,存储于 data/keys/.vault_salt
- 验证机制:派生验证哈希,存储于 data/keys/.vault_verifier
- 加密模式:AES-256-GCM 认证加密,提供完整性保证
- 防暴力破解:高迭代次数的密钥派生,显著增加破解难度
- 防篡改:GCM 模式提供认证标签,数据被篡改可立即检测
- 零知识验证:密码验证过程不暴露任何密码相关信息
- 数据隔离:敏感数据与普通数据存储隔离
实现完整的 NAT 穿透方案:
- STUN 协议:会话遍历 UDP NAT,获取公网映射地址
- 打洞流程:双向同时发送探测包,建立 UDP 会话
- NAT 类型:支持 Full Cone、Restricted Cone、Port Restricted Cone、Symmetric NAT
- 心跳保活:维持 NAT 端口映射,防止会话超时
- 去中心化:无中心服务器的P2P 网络架构
- 动态发现:支持节点动态加入与离开
- 连接复用:单端口多连接,支持多路复用
- 状态监控:实时连接状态监控与自动重连
A: 使用 python -m pip 代替 pip,例如:
python -m pip install -r requirements.txt如果想永久修复,可以重新安装 pip:
python -m pip install --upgrade --force-reinstall pipA: 很遗憾,本地金库密码无法找回。你需要:
- 删除
data/keys/目录下的密钥文件 - 删除
data/shares/目录下的份额文件 - 重新启动应用,设置新密码
⚠️ 注意:之前本地存储的数据将无法恢复
A: 请检查:
- 对方节点是否在线
- 邀请码是否正确(完整复制,不要有多余空格)
- 网络是否允许 UDP 通信(某些防火墙可能阻止)
- 双方是否都在同一版本的系统上
A: 可能原因:
- 存储份额的节点不在线
- 网络连接问题
- 检查清单文件是否正确
- 尝试等待更长时间,或联系更多节点上线
A: 系统支持任何类型的文件:
- 文档(.docx, .pdf, .txt 等)
- 图片(.jpg, .png, .gif 等)
- 视频和音频文件
- 压缩包(.zip, .rar 等)
- 任意二进制文件
文件大小建议:虽然系统支持大文件,但建议单个文件不超过 1GB 以获得最佳性能。
A: 系统通过多层加密保护:
- 传输层:Kyber 密钥交换 + AES-256-GCM 加密
- 身份认证:Dilithium 数字签名
- 存储层:本地金库 AES-256-GCM 加密
- 容灾层:Shamir 秘密共享,即使部分节点丢失也能恢复
A: 不建议。每个节点应该有独立的身份:
- 身份文件存储在
data/keys/node_identity.dat(AES-256-GCM 加密) - 如果需要在多台设备使用,可以复制此文件(但存在安全风险)
- 更好的方式是让每台设备生成独立身份,然后互相连接
A:先尝试在控制面板中添加入站规则
- 按 Win + R ,输入 wf.msc
- 按 Enter
- 点击左侧 "入站规则"
- 点击右侧 "新建规则..."
- 选择 "端口" -> "下一步"
- 选择 "UDP" ,输入 "9999" -> "下一步"
- 选择 "允许连接" -> "下一步"
- 保持所有选项勾选 -> "下一步"
- 输入名称: "QSP-P2P"
- 点击 "完成"
如遇到其他问题,请检查:
- Python 版本是否符合要求
- 所有依赖是否正确安装
- 网络连接是否正常
- 防火墙设置是否允许 UDP 通信